<?php
/**
 * 打印
 * 
 * @param type $var 
 * @param type $isExit 
 */
 function printr($var, $isExit = true){
     if(PDK_DEBUG){
         if(is_array($var) || is_object($var)){
             echo '<pre>';
             print_r($var);
             echo '<pre>';
             }
        else{
             echo $var;
             }
         echo '<br>';
         if($isExit) exit (1);
         }
    }


/**
 * 获取和设置配置定义
 * 
 * @param string $name 配置名称
 * @param mixed $value 值
 * @return mixed 
 */
 function config($name = null, $value = null){
    
     static $_config = array();
    /**
     * 无参数时获取所有
     */

     if(empty($name)) return $_config;
    
    /**
     * 优先执行设置获取或赋值
     */
     if (is_string($name)){
        /**
         * 名称过滤
         */
         if (!strpos($name, '.')){
             $name = strtolower($name);
            /**
             * 值过滤
             */
             if (is_null($value))
                 return isset($_config[$name])? $_config[$name] : null;
            /**
             * 设置配置定义
             */
             echo $_config[$name] = $value;
             return;
         }
        
        /**
         * 二维数组设置和获取支持
         */
         $name = explode('.', $name);
         $name[0] = strtolower($name[0]);
        
         if (is_null($value))
             return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
        
         $_config[$name[0]][$name[1]] = $value;
        return;
     }

    /**
     * 批量设置
     */
     if(is_array($name)){
         return $_config = array_merge($_config, array_change_key_case($name));
         }

    /**
     * 避免非法参数
     */
     return null;
 }

/**
 */
 function trackTrace(){
     $trace = debug_backtrace();
     unset($trace[0]);
     $str = '';
     foreach ($trace as $row){
         $str .= $row['file'] . ':' . $row['line'] . '行，调用方法：' . $row['function'] . '<br>';
     }
     echo $str;
 }

/**
 * 基类库或者应用类库导入 (本函数有缓存功能)
 * 
 * @param string $class 表示要导入的类库,采用命名空间的方式
 * @param string $baseUrl 表示导入的基础路径,留空的话系统
 * @param string $ext ext 表示类库后缀，默认是 .class.php
 * @return boolen 
 */
 function import($class, $baseUrl = '', $ext = '.class.php'){
    
    /**
     * 静态变量定义
     */
     static $_file = array();
     static $_class = array();
    
     $class = str_replace(array('.', '#'), array(SEP, '.'), $class);
    
     if('' === $baseUrl && false === strpos($class, SEP)){
        /**
         * 检查别名导入
         */
         return alias_import($class);
         }
    
     if(isset($_file[$class . $baseUrl])){
         return true;
         }else{
         $_file[$class . $baseUrl] = true;
         }
    
     $class_strut = explode(SEP, $class);
    
     if(empty($baseUrl)){
        
         if('@' == $class_strut[0] || APP_NAME == $class_strut[0]){
            /**
             * 加载当前项目应用类库
             */
             $baseUrl = dirname(APP_PATH);
             $class = str_replace(array(APP_NAME . SEP, '@' . SEP), APP_PATH . SEP, $class);
            
             }elseif (in_array(strtolower($class_strut[0]), array('think', 'org', 'com'))){
            /**
             * 加载框架基类库或者公共类库
             */
             $baseUrl = CORE_PATH . SEP;
            
             }else{
             $class = APPS_PATH . SEP . $class;
             }
     }
    
     if(substr($baseUrl, -1) != SEP) $baseUrl .= SEP;
     $classfile = is_file($class . $ext) ? $class . $ext : $baseUrl . $class . $ext;
    
     if($ext == '.class.php' && is_file($classfile)){
        /**
         * 冲突检测
         */
         $class = basename($classfile, $ext);
         if(isset($_class[$class])){
             throw_exception(Helper :: getLanguage('_CLASS_CONFLICT_') . ':' . $_class[$class] . ' ' . $classfile);
         }
        
         $_class[$class] = $classfile;
     }
    
    /**
     * 导入目录下的指定类库文件
     */
     return require_cache($classfile);
 }

/**
 * 返回数组中指定的一列
 * @access public
 * @param array $input 需要取出数组列的多维数组（或结果集）
 * @param string $columnKey 需要返回值的列，它可以是索引数组的列索引，或者是关联数组的列的键。也可以是NULL，此时将返回整个数组（配合indexKey参数来重置数组键的时候，非常管用）
 * @param string $indexKey 作为返回数组的索引/键的列，它可以是该列的整数索引，或者字符串键值。
 * @return array
 */
if (! function_exists('array_column'))
{
    function array_column(array $input, $columnKey, $indexKey = null)
    {
        $result = array();
        if (null === $indexKey)
        {
            if (null === $columnKey)
            {
                $result = array_values($input);
            }
            else
            {
                foreach ($input as $row)
                {
                    $result[] = $row[$columnKey];
                }
            }
        }
        else
        {
            if (null === $columnKey)
            {
                foreach ($input as $row)
                {
                    $result[$row[$indexKey]] = $row;
                }
            }
            else
            {
                foreach ($input as $row)
                {
                    $result[$row[$indexKey]] = $row[$columnKey];
                }
            }
        }
        return $result;
    }
}

/**
 * 通过指定开始&结束字符查找字符串
 */
if(!function_exists('pdk_str_find')){
    function pdk_str_find($string,$start_char,$end_char){
        $preg = "/\{$start_char}.*\{$end_char}/";
        return preg_replace($preg,'',$string);
    }
}

if(!function_exists('pdk_getDbNameByTableName')){
    function pdk_getDbNameByTableName($table_name){
        $app_plugin_id = session::get('app_plugin_id');
        $arr = explode('_',$table_name);
        //系统底层库
        if($arr[1] == 'sys'){
            $db_name = 'db_sys';
        }else{
            if($app_plugin_id){
                //如果是应用库
                if(session::get('app_id') != session::get('app_plugin_id')){
                    $db_name = "db_sys_".session::get('app_plugin_id')."_".session::get('app_id');
                }
            }else{
                $db_name = "db_sys_{$arr[1]}";
            }
        }

       return $db_name;
    }
}

/**
 * 快速定义和导入别名
 * 
 * @parma string $alias     别名
 * @param string $classfile 类文件
 * @return mixed 
 */
 function alias_import($alias, $classfile = ''){
    
     static $_alias = array();
    
     if('' !== $classfile){
        /**
         * 定义别名导入
         */
         $_alias[$alias] = $classfile;
         return;
         }
    
     if(is_string($alias)){
        
        /**
         * 是否存在别名
         */
         if(isset($_alias[$alias]))
             return require_cache($_alias[$alias]);
        
         }elseif(is_array($alias)){
        
         foreach ($alias as $key => $val)
         $_alias[$key] = $val;
        
         return ;
         }
     return false;
  }
  
/**
 * 输出纯文本
 * 
 * @param string  $text    文件
 * @param boolean $parseBr 是否清除内容中的转义字符
 *
 * @return string 
 */
 function text($text, $parseBr = false) {

	if( !$parseBr ) {
		$text =	str_replace(array("\r","\n","\t"),' ',$text);
	} else {
		$text = nl2br($text);
	}
	$text   = stripslashes($text);
	$text	= htmlspecialchars($text, ENT_NOQUOTES,'UTF-8');
	
	return $text;
 }

/**
 * @param $time
 */
function dateFormat($time){
    if(strlen($time) == 16 ){
        $time = substr($time,0,10);
    } elseif( strlen($time) <= 5 ){
        return $time;
    }else {
        $time = strtotime($time);
    }
    return date("m-d",$time);
}

/**
 * @param $time
 */
function timeFormat($time){
    if(strlen($time) == 16 ){
        $time = substr($time,0,10);
    }
    return date("Y-m-d H:i:s",$time);
}

function curlPost($url,$params){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$params);
    $output = curl_exec($ch);
    curl_close($ch);
    if( $output === false ){
        $output = 'error:'.curl_errno($ch);
    }
    return $output;
}


function getOrderTypeName($type_id){
    switch($type_id){
        case 0:
            return '未支付订单';break;
        case 1:
            return '已取消订单';break;
        case 2:
            return '已支付订单';break;
        case 3:
            return '已消费订单';break;
        default:
            return '未支付订单';
            break;
    }
}


function getAdvertUrl($attach_name,$attach_kind = 1){
    $url = Controller::getConfig('file_server_url');
    $url .= "/2006/{$attach_kind}/".$attach_name;
    return $url;
}
/*
        * 中文截取，支持gb2312,gbk,utf-8,big5
        *
        * @param string $str 要截取的字串
        * @param int $start 截取起始位置
        * @param int $length 截取长度
        * @param string $charset utf-8|gb2312|gbk|big5 编码
        * @param $suffix 是否加尾缀
        */
function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
    if(function_exists("mb_substr"))
    {
        if(mb_strlen($str, $charset) <= $length) return $str;
        $slice = mb_substr($str, $start, $length, $charset);
    }
    else
    {
        $re['utf-8']   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}/";
        $re['gb2312'] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
        $re['gbk']          = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
        $re['big5']          = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
        preg_match_all($re[$charset], $str, $match);
        if(count($match[0]) <= $length) return $str;
        $slice = join("",array_slice($match[0], $start, $length));
    }
    if($suffix) return $slice."…";
    return $slice;
}

/**
 * 通过字段备注去转义字段值
 * @param $id
 * @param $db
 * @param $table_name
 * @param $table_field
 * @return string
 */
function getFieldNameByFieldComment($id,$db,$table_name,$table_field){
    $model = Controller::model('Administrator');
    $model->setConfig(Controller::getConfig($db));
    $model->setTableName($table_name);
    $_extensionArray['table_info'] = $model->getTableInfomation();
    foreach($_extensionArray['table_info'] as $field=>$val){
        if($field == $table_field){
            if(isset($val['commentEX'][$id])){
                return $val['commentEX'][$id];
            }
        }
    }
    return '';
}

/**
 * 通过字段名称获取字段备注
 * @param $table_field
 * @param $db
 * @param $table_name
 * @param $is_all
 * @return string
 */
function getFieldCommentByFieldName($table_field,$db,$table_name,$is_all = 0){
    $model = Controller::model('Administrator');
    $model->setConfig(Controller::getConfig($db));
    $model->setTableName($table_name);
    $_extensionArray['table_info'] = $model->getTableInfomation();
    foreach($_extensionArray['table_info'] as $field=>$val){
        if($field == $table_field){
            if($is_all==1 && isset($val['comment'])){
                return $val['comment'];
            }else{
                return preg_replace('/\{.*\}/','',$val['title']);
            }
        }
    }
    return '';
}

/**
 * 通过字段名称获取字段备注
 * @param $table_field
 * @param $db
 * @param $table_name
 * @param $is_all
 * @return string
 */
function getFieldTypeByFieldName($table_field,$db,$table_name){
    $model = Controller::model('Administrator');
    $model->setConfig(Controller::getConfig($db));
    $model->setTableName($table_name);
    $_extensionArray['table_info'] = $model->getTableInfomation();
    foreach($_extensionArray['table_info'] as $field=>$val){
        if($field == $table_field){
            return $val['type'];
        }
    }
    return '';
}

function getFieldContentByFieldId($id,$db,$table_name,$key_name,$val_name){
    $model = Controller::model('Administrator');
    $model->setConfig(Controller::getConfig($db));
    $model->setTableName($table_name);
    $data = $model->getOne(array($key_name=>$id));
    return $data[$val_name]?$data[$val_name]:$id;
}